周边POI搜索 Sample详情

最后更新时间:2019年7月5日

POI的周边搜索,即为范围查询方式,根据用户设置的查询范围(支持圆、矩形),可结合信息类型等条件进行查询,搜索满足条件的POI信息点,最后可以通过标注、绘制或者列表方式展示查询到的兴趣点。

周边搜索的实现方法与关键字搜索基本上类似,实现的思路与方法如下:

1

POI查询对象准备

与关键字POI搜索相同。

//创建POI查询对象
MGSPoiSearch *poiSearch=[[MGSPoiSearch alloc] init];
NSString *poiDbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"/MapGIS Mobile 2D Sample/POI/WuhanPOI.db"];  //POI数据路径
//为POI查询对象设置配置好的.db数据,并以此来初始化
[poiSearch initWithDBPath:poiDbPath];
//设置查询每页的结果数目
[poiSearch setPageSize:40];

2

设置查询范围、查询类型

周边搜索,通过MGSPoiSearch类对象的bound属性设置范围条件,调用query属性设置查询属性条件。

首先,需要创建查询范围对象MGSSearchBound,根据不同的参数来构造,可以实现圆形范围、矩形范围两种周边搜索方式。一般实现范围查询时,可将查询的范围事先绘制在地图上,待查询POI之后可对比效果,但要注意坐标系一致的问题。

//坐标点
MGSDot centerDot=MGSDotMake(12725830.65, 3571659.71);
//查询范围(坐标点、半径)
MGSSearchBound *searchBound=[[MGSSearchBound alloc] initWithCenter:centerDot radiusInMeters:500];
//为POI查询对象设置查询范围
[poiSearch setBound:searchBound];
//矩形范围
MGSRect rect=MGSRectMake(12725430, 3571159, 12726230, 3571959);
//查询范围(rect矩形)
MGSSearchBound *searchBound=[[MGSSearchBound alloc] initWithRect:rect];
//为POI查询对象设置查询范围
[poiSearch setBound:searchBound];

设置了查询范围,如果需要进行POI的分类查询,还需要利用query属性设置查询条件,POI类型参考关键字搜索模块中的说明。当然,也可以周边搜索和关键字搜索两种模式结合。

//设置POI查询条件:POI分类查询,如查询“中餐厅”类型
MGSQuery *poiQuery=[[MGSQuery alloc] initWithCityCode:nil category:POI_TYPE_FOODBEVERAGES cityCode:nil];
[poiSearch setQuery:poiQuery];

3

查询与结果展示

查询POI,遍历查询结果,实现代码与关键字搜索一样,也可通过多种形式展示,核心代码参考关键字搜索小节。

//查询POI
MGSPoiPagedResult *poiPagedResult=[poiSearch searchPOI];
if (poiPagedResult != nil && poiPagedResult.totalPOICount > 0) {
    for (int i=1; i<=poiPagedResult.pageCount; i++) {
        //只获取第1页结果
        NSArray<MGSPoiItem *> *poiItemArr=[poiPagedResult getPageWithPageNumber:i];
        for (int j=0; j<[poiItemArr count]; j++) {
            //获取POI项
            MGSPoiItem *poiItem=poiItemArr[j];

            //获取坐标点
            MGSDot dot=[poiItem point];
            //经纬度转Web墨卡托
            [MGSSpaProjection lonLat2Mercator:&dot];

            //POI名称、电话、地址、行政区划代码、类型代码
            NSString *name=[poiItem name];
            NSString *tel=[poiItem tel];
            NSString *address=[poiItem address];
            NSString *adCode=[poiItem adCode];
            NSString *typeCode=[poiItem typeCode];
        }
    }
} else {
    NSLog(@"未查询到结果");
}

POI周边搜索实现效果如下图所示:

周边POI搜索-矩形范围.jpg